package com.adou.service;

import com.adou.common.model.FlowMain;
import com.adou.common.model.FlowMainFile;
import com.adou.common.model.WorkAttach;
import com.adou.service.base.BaseService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface FlowMainFileService extends BaseService<FlowMainFile> {

    /**
     * 分页
     * @param pageNum
     * @param pageSize
     * @param map
     * @return
     */
    Map<String, Object> pageList(int pageNum, int pageSize, Map<String, Object> map);

    /**
     * 添加流程实例
     * @param map ifmid 流程主键 ctitle 标题 ccreator 用户
     *            uid 用户主键
     * @return
     */
    Map<String, Object> insertSelective(Map<String, Object> map);

    /**
     * 根据用户主键查询流程列表
     * @return
     */
    List<FlowMain> queryFlowListById();

    /**
     * 根据ifmid 获取表单数据
     * @param ifmid
     * @return
     */
    Map<String, Object> getFormDataByIfmid(Long ifmid);

    /**
     * 根据流程办理主表主键获取表单详细数据
     * @param id
     * @return
     */
    Map<String, Object> getFormDataById(Long id);

    /**
     * 填写表单，进入下一个流程节点
     * @param map
     * @return
     */
    Map<String, Object> fillForm(Map<String, Object> map);

    /**
     * 表单重新提交，进入下一个流程节点
     * @param map
     * @return
     */
    Map<String, Object> reFill(Map<String, Object> map);

    /**
     * 签收
     * @param id 流程办理主表主键
     * @return
     */
    Map<String, Object> signFlow(Long id);

    /**
     * 撤销流程
     * @param id 流程办理主表主键
     * @return
     */
    Map<String, Object> backFlow(Long id);

    /**
     * 退回流程
     * @param id 流程办理主表主键
     * @param note 退回意见
     * @return
     */
    Map<String, Object> returnFlow(Long id,String note);

    /**
     * 查询表单数据
     * @param id 流程办理主表主键
     * @return
     */
    Map<String, Object> queryDetailById(Long id);

    /**
     * 特送节点
     * @param map id 流程办理主表主键
     *            ctodoids 待办理人主键 ctodousers 待办理人姓名（","隔开）
     *            ccurtid 节点主键
     * @return
     */
    Map<String, Object> pushTask(Map<String, Object> map);

    /**
     * 特送个人
     * @param map id 流程办理主表主键
     *            todoids 待办理人主键 todousers 待办理人姓名（","隔开）
     * @return
     */
    Map<String, Object> pushPerson(Map<String, Object> map);

    /**
     * 催办流程
     * @param id 流程办理表主键
     * @return
     */
    Map<String, Object> urgeFlow(Long id);

    /**
     * 上传
     * @param fileList
     * @param workAttach
     * @param type
     * @return
     */
    Map<String, Object> uploadFileAsync(List<MultipartFile> fileList, WorkAttach workAttach, String type);

    /**
     * 删除当前环节附件
     * @param id 附件主键
     * @return
     */
    Map<String, Object> deleteFile(Long id);

}
